using System;
using Yanesdk.System;

namespace AdvEvaluator
{
    /// <summary>
    /// タスク名に応じたタスクのインスタンスを返す
    /// </summary>
    class SceneFactory : TaskFactoryBase<SceneName>
    {
        private GameSystem system;

        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="system"></param>
        public SceneFactory(GameSystem system)
        {
            this.system = system;
        }

        /// <summary>
        /// 指定されたシーン名に応じて、シーンクラスのインスタンスを返す
        /// </summary>
        /// <param name="scene">シーン名</param>
        /// <returns>シーンクラスのインスタンス</returns>
        public override TaskBase CreateTask(SceneName scene)
        {
            /*
            switch (name) {
            case SceneName.Title:
                return new Scene.Title(system);
            case SceneName.LocalPlay:
                return new Scene.LocalPlay(system);
            .....
            }
            */
            // シーン名からリフレクションでインスタンスを生成する
            string enumName = Enum.GetName(typeof(SceneName), scene);
            string sceneName = string.Format("AdvEvaluator.Scene.{0}", enumName);
            Type type = Type.GetType(sceneName);
            return Activator.CreateInstance(type, system) as TaskBase;
        }
    }

}
